package processes

import (
	"fmt"
)

//显示在线列表

//因为 userMgr 实例在服务器端有且只有一个
//因为在很多地方都会使用到，因此定义为全局变量
var (
	userMgr *UserMgr
)

type UserMgr struct {
	onlineUsers map[int]*UserProcess
}

//完成对userMgr 初始化工作
func init() {
	userMgr = &UserMgr{
		onlineUsers: make(map[int]*UserProcess, 1024),
	}
}

//完成对onlineUsers 添加
func (um *UserMgr) AddOnlineUser(up *UserProcess) {
	um.onlineUsers[up.UserId] = up
}

//删除 
func (um *UserMgr) DelOnlineUser(userId int) {
	delete(um.onlineUsers, userId)
}

//返回当前所有在线用户
func (um *UserMgr) GetAllOnlineUser() map[int]*UserProcess {
	return um.onlineUsers
}

//根据id 返回对应的值
func (um *UserMgr) GetOnlineUserById(userId int) (up *UserProcess, err error) {

	//从map 中取出值，带检测发生
	up, ok := um.onlineUsers[userId]
	if !ok { //说名查找用户不在线
		err = fmt.Errorf("用户%d 不存在", userId)
		return
	}
	return
}
